package org.sy.lab.多线程基础._3_同步辅助类._4_Phaser阶段器;

//Phaser是一种可重用的同步屏障，比CountDownLatch和CyclicBarrier更灵活
//Phaser默认不会进行异常处理，休眠的线程不会响应中断事件
//arriveAndAwaitAdvance()等待参与者到达指定的数量
//arriveAndDeregister注销当前线程，可以模拟CountDownLatch的功能
//继承Phaser可以实现更多的触发行为，其中onAdvance()返回true表示deregister所有线程并解除阻塞
//例子中模拟火箭分3个阶段升空的过程，有3个模块在每个阶段都要同时就绪，燃油要在前两个阶段就绪，然后在第2个阶段结束后回收
public class Main {

	public static void main(String[] args) {
		
		Rocket rocket = new Rocket();
		
		Module module1 = new Module(rocket);
		Module module2 = new Module(rocket);
		Module module3 = new Module(rocket);
		Fuel fuel = new Fuel(rocket);
		
		Thread thread1 = new Thread(module1, "模块1");
		Thread thread2 = new Thread(module2, "模块2");
		Thread thread3 = new Thread(module3, "模块3");
		Thread thread4 = new Thread(fuel, "燃料");
		
		thread1.start();
		thread2.start();
		thread3.start();
		thread4.start();
	}
}
